import axios from 'axios'

import store from '@/store'
import router from '@/router'
// 导出基准地址，方便不使用axios的地方使用 比如图片上传
// export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
// 备用
// apipc-xiaotuxian-front.itheima.net/
export const baseURL = 'http://apipc-xiaotuxian-front.itheima.net/'
const instance = axios.create({

  baseURL,
  timeout: 5000
})

instance.interceptors.request.use((config) => {
  // 获取用户信息对象
  const { profile } = store.state.user
  if (profile.token) {
    config.headers.Authorization = `Bearer ${profile.token}`
  }
  return config
}, (err) => {
  return Promise.reject(err)
})
// 拦截后台返回数据，解构 data
instance.interceptors.response.use((res) => res.data, err => {
  // 401token失效进入该函数
  if (err.response && err.response.status === 401) {
    // 1 清空无效用户信息
    // 2 跳转到登录页码
    // 3 携带当前路由信息
    store.commit('user/setUser', {})
    const fullpath = encodeURIComponent(router.currentRoute.value.fullpath)// vue3 在js中获取当前对象的路由地址
    router.push('/login?redirectUrl=' + fullpath)
  }
  return Promise.reject(err)
})

// 请求工具函数
export default (url, method, submitData) => {
  // const a={}
  // if(get){
  //   a.params
  // }else{
  //   a=data
  // }
  // 请求地址  请求方式 提交的数据
  return instance({
    url,
    method,
    // 1 如果是get请求需要用params传submitData
    // 2 如果不是get请求需要用到data传submitData
    // []设置动态key  可以写js表达式 表达式的结果当做key
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
}
